// pages/employment/job-info.js
const api = require('../../utils/api');
const app = getApp();
const utils = require('../../utils/util');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 搜索关键词
    searchKeyword: '',
    
    // 当前筛选类型
    currentFilter: 'all',
    
    // 行业选项
    industryOptions: [
      { id: 1, name: '互联网/IT' },
      { id: 2, name: '金融' },
      { id: 3, name: '教育' },
      { id: 4, name: '医疗' },
      { id: 5, name: '制造业' },
      { id: 6, name: '服务业' },
      { id: 7, name: '建筑/房地产' },
      { id: 8, name: '其他' }
    ],
    
    // 职位类型选项
    jobTypeOptions: [
      { id: 1, name: '全职' },
      { id: 2, name: '兼职' },
      { id: 3, name: '实习' }
    ],
    
    // 选中的行业
    selectedIndustry: '',
    
    // 选中的职位类型
    selectedJobType: '',
    
    // 招聘信息列表
    jobs: [],
    
    // 分页参数
    pageNum: 1,
    pageSize: 10,
    
    // 是否正在加载
    isLoading: false,
    
    // 是否没有更多数据
    noMoreData: false,
    
    // 是否显示提交成功弹窗
    showSuccessModal: false,
    
    // 页面数据
    jobList: [], // 职位列表
    loading: false, // 加载状态
    hasMore: true, // 是否有更多数据
    total: 0, // 总记录数
    keyword: '', // 搜索关键词
    industry: '', // 行业筛选
    jobType: '', // 职位类型筛选
    
    // 筛选选项
    industries: ['互联网', '金融', '教育', '医疗', '制造业', '服务业', '其他'],
    jobTypes: ['全职', '兼职', '实习', '校招'],
    
    // 弹窗控制
    showDetail: false, // 显示详情弹窗
    showApply: false, // 显示申请弹窗
    currentJob: null, // 当前选中的职位
    
    // 申请表单数据
    form: {
      name: '',
      phone: '',
      email: '',
      introduction: '',
      resumeFile: ''
    },
    
    // 表单验证
    formError: {
      name: '',
      phone: '',
      introduction: ''
    },
    
    // 文件上传
    uploadProgress: 0,
    uploading: false,
    
    // 系统信息
    statusBarHeight: app.globalData.statusBarHeight,
    windowHeight: app.globalData.windowHeight,
    windowWidth: app.globalData.windowWidth
  },

  /**
   * 搜索输入变化
   */
  onSearchInput(e) {
    this.setData({
      searchKeyword: e.detail.value
    });
  },
  
  /**
   * 清除搜索关键词
   */
  clearSearch() {
    this.setData({
      searchKeyword: ''
    });
    this.resetSearch();
  },
  
  /**
   * 搜索职位
   */
  searchJobs() {
    this.resetSearch();
  },
  
  /**
   * 重置搜索并加载数据
   */
  resetSearch() {
    this.setData({
      pageNum: 1,
      jobs: [],
      noMoreData: false
    }, () => {
      this.loadJobList(true);
    });
  },
  
  /**
   * 设置筛选条件
   */
  setFilter(e) {
    const filter = e.currentTarget.dataset.filter;
    this.setData({
      currentFilter: filter,
      selectedIndustry: '',
      selectedJobType: ''
    });
    this.resetSearch();
  },
  
  /**
   * 行业选择变更
   */
  onIndustryChange(e) {
    const index = parseInt(e.detail.value);
    const industry = this.data.industryOptions[index];
    this.setData({
      currentFilter: 'industry',
      selectedIndustry: industry.name,
      selectedJobType: ''
    });
    this.resetSearch();
  },
  
  /**
   * 职位类型选择变更
   */
  onJobTypeChange(e) {
    const index = parseInt(e.detail.value);
    const jobType = this.data.jobTypeOptions[index];
    this.setData({
      currentFilter: 'jobType',
      selectedJobType: jobType.name,
      selectedIndustry: ''
    });
    this.resetSearch();
  },
  
  /**
   * 加载招聘信息
   */
  loadJobs() {
    if (this.data.isLoading || this.data.noMoreData) {
      return;
    }
    
    this.setData({
      isLoading: true
    });
    
    // 构建请求参数
    const params = {
      pageNum: this.data.pageNum,
      pageSize: this.data.pageSize
    };
    
    if (this.data.searchKeyword) {
      params.keyword = this.data.searchKeyword;
    }
    
    if (this.data.currentFilter === 'latest') {
      params.orderBy = 'createTime';
      params.orderType = 'desc';
    } else if (this.data.currentFilter === 'industry') {
      params.industry = this.data.selectedIndustry;
    } else if (this.data.currentFilter === 'jobType') {
      params.jobType = this.data.selectedJobType;
    }
    
    // 模拟加载数据
    setTimeout(() => {
      // 模拟数据
      const mockJobs = this.getMockJobs();
      
      // 实际项目中应该使用以下代码从后端获取数据
      // http.get('/api/employment/jobs', params)
      //   .then(res => {
      //     if (res.data && res.data.length > 0) {
      //       this.setData({
      //         jobs: [...this.data.jobs, ...res.data],
      //         pageNum: this.data.pageNum + 1,
      //         noMoreData: res.data.length < this.data.pageSize
      //       });
      //     } else {
      //       this.setData({
      //         noMoreData: true
      //       });
      //     }
      //   })
      //   .catch(error => {
      //     console.error('获取招聘信息失败:', error);
      //     wx.showToast({
      //       title: '获取招聘信息失败',
      //       icon: 'none'
      //     });
      //   })
      //   .finally(() => {
      //     this.setData({
      //       isLoading: false
      //     });
      //   });
      
      if (mockJobs.length > 0) {
        this.setData({
          jobs: [...this.data.jobs, ...mockJobs],
          pageNum: this.data.pageNum + 1,
          noMoreData: this.data.pageNum >= 3 // 模拟只有3页数据
        });
      } else {
        this.setData({
          noMoreData: true
        });
      }
      
      this.setData({
        isLoading: false
      });
    }, 1000);
  },
  
  /**
   * 获取模拟数据
   */
  getMockJobs() {
    // 根据筛选条件过滤模拟数据
    let mockJobs = [
      {
        id: 1,
        title: '前端开发工程师',
        salary: '8k-15k',
        companyName: '科技互联网有限公司',
        companyLogo: '../../static/images/company/company1.png',
        location: '济南市历下区',
        tags: ['互联网/IT', '全职', '本科及以上'],
        publishDate: '2023-06-01',
        companySize: '100-499人',
        companyType: '民营企业',
        requirements: [
          '计算机相关专业，本科及以上学历',
          '熟悉HTML、CSS、JavaScript等前端技术',
          '熟悉Vue、React等前端框架',
          '有良好的沟通能力和团队协作精神'
        ],
        description: '负责公司产品的前端开发工作，包括但不限于页面开发、组件开发、性能优化等。与后端开发人员协作，实现产品功能。参与产品需求讨论，提供技术解决方案。',
        contactPerson: '张先生',
        contactPhone: '0531-12345678',
        contactEmail: 'hr@example.com'
      },
      {
        id: 2,
        title: '后端开发工程师',
        salary: '10k-20k',
        companyName: '云计算科技有限公司',
        companyLogo: '../../static/images/company/company2.png',
        location: '济南市高新区',
        tags: ['互联网/IT', '全职', '本科及以上'],
        publishDate: '2023-06-02',
        companySize: '500-999人',
        companyType: '外资企业',
        requirements: [
          '计算机相关专业，本科及以上学历',
          '熟悉Java、Python等后端开发语言',
          '熟悉Spring Boot、Django等后端框架',
          '熟悉MySQL、Redis等数据库'
        ],
        description: '负责公司产品的后端开发工作，包括但不限于接口开发、数据库设计、性能优化等。与前端开发人员协作，实现产品功能。参与产品需求讨论，提供技术解决方案。',
        contactPerson: '李女士',
        contactPhone: '0531-87654321',
        contactEmail: 'hr@example2.com'
      },
      {
        id: 3,
        title: '数据分析师',
        salary: '12k-18k',
        companyName: '大数据科技有限公司',
        companyLogo: '../../static/images/company/company3.png',
        location: '济南市槐荫区',
        tags: ['互联网/IT', '全职', '硕士及以上'],
        publishDate: '2023-06-03',
        companySize: '50-99人',
        companyType: '民营企业',
        requirements: [
          '统计学、数学、计算机等相关专业，硕士及以上学历',
          '熟悉数据分析方法和工具',
          '熟悉Python、R等数据分析语言',
          '有良好的沟通能力和团队协作精神'
        ],
        description: '负责公司产品的数据分析工作，包括但不限于数据挖掘、数据可视化、数据报告等。与产品、运营等团队协作，提供数据支持。参与产品需求讨论，提供数据分析方案。',
        contactPerson: '王先生',
        contactPhone: '0531-13579246',
        contactEmail: 'hr@example3.com'
      },
      {
        id: 4,
        title: '产品经理',
        salary: '15k-25k',
        companyName: '互联网科技有限公司',
        companyLogo: '../../static/images/company/company4.png',
        location: '济南市天桥区',
        tags: ['互联网/IT', '全职', '本科及以上'],
        publishDate: '2023-06-04',
        companySize: '1000人以上',
        companyType: '上市公司',
        requirements: [
          '计算机、工商管理等相关专业，本科及以上学历',
          '熟悉产品设计流程和方法',
          '熟悉互联网产品开发流程',
          '有良好的沟通能力和团队协作精神'
        ],
        description: '负责公司产品的规划和设计工作，包括但不限于需求分析、产品设计、产品文档编写等。与开发、设计、测试等团队协作，推进产品开发。参与产品战略讨论，提供产品解决方案。',
        contactPerson: '赵女士',
        contactPhone: '0531-24681357',
        contactEmail: 'hr@example4.com'
      },
      {
        id: 5,
        title: '会计',
        salary: '6k-10k',
        companyName: '金融服务有限公司',
        companyLogo: '../../static/images/company/company5.png',
        location: '济南市历城区',
        tags: ['金融', '全职', '本科及以上'],
        publishDate: '2023-06-05',
        companySize: '100-499人',
        companyType: '民营企业',
        requirements: [
          '会计、财务管理等相关专业，本科及以上学历',
          '持有会计从业资格证书',
          '熟悉财务软件和流程',
          '有良好的职业道德和团队协作精神'
        ],
        description: '负责公司的财务核算工作，包括但不限于账务处理、报表编制、税务申报等。与财务、审计等团队协作，确保财务工作的准确性和合规性。参与财务分析，提供财务建议。',
        contactPerson: '钱先生',
        contactPhone: '0531-36925814',
        contactEmail: 'hr@example5.com'
      }
    ];
    
    // 根据搜索关键词过滤
    if (this.data.searchKeyword) {
      const keyword = this.data.searchKeyword.toLowerCase();
      mockJobs = mockJobs.filter(job => 
        job.title.toLowerCase().includes(keyword) || 
        job.companyName.toLowerCase().includes(keyword)
      );
    }
    
    // 根据筛选条件过滤
    if (this.data.currentFilter === 'industry' && this.data.selectedIndustry) {
      mockJobs = mockJobs.filter(job => 
        job.tags.includes(this.data.selectedIndustry)
      );
    } else if (this.data.currentFilter === 'jobType' && this.data.selectedJobType) {
      mockJobs = mockJobs.filter(job => 
        job.tags.includes(this.data.selectedJobType)
      );
    }
    
    // 根据页码返回对应数据
    const start = (this.data.pageNum - 1) * this.data.pageSize;
    const end = start + this.data.pageSize;
    return mockJobs.slice(start, end);
  },
  
  /**
   * 加载更多招聘信息
   */
  loadMoreJobs() {
    this.loadJobList();
  },
  
  /**
   * 滚动到顶部
   */
  scrollToTop() {
    wx.pageScrollTo({
      scrollTop: 0,
      duration: 300
    });
  },
  
  /**
   * 查看职位详情
   */
  viewJobDetail: function (e) {
    const jobId = e.currentTarget.dataset.id;
    
    // 调用API获取职位详情
    api.employment.getJobById(jobId).then(res => {
      if (res.code === 200) {
        const job = res.data;
        
        // 处理标签和要求
        if (!job.tagList && job.tags) {
          job.tagList = job.tags.split(',').map(tag => tag.trim()).filter(tag => tag);
        }
        
        if (!job.requirementList && job.requirements) {
          job.requirementList = job.requirements.split('\n').map(req => req.trim()).filter(req => req);
        }
        
        this.setData({
          currentJob: job,
          showDetail: true
        });
      } else {
        wx.showToast({
          title: '获取详情失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.showToast({
        title: '获取详情失败，请检查网络',
        icon: 'none'
      });
    });
  },
  
  /**
   * 关闭职位详情弹窗
   */
  closeDetail: function() {
    this.setData({
      showDetail: false
    });
  },
  
  /**
   * 申请当前职位
   */
  applyCurrentJob() {
    // 先关闭详情弹窗
    this.setData({
      showDetail: false
    });
    
    // 使用setTimeout确保详情弹窗关闭后再显示申请弹窗
    setTimeout(() => {
      this.setData({
        showApply: true
      });
      
      // 获取用户信息，自动填充表单
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.setData({
          'form.name': userInfo.name || '',
          'form.phone': userInfo.phone || '',
          'form.email': userInfo.email || ''
        });
      }
    }, 300);
  },
  
  /**
   * 申请职位
   */
  applyJob(e) {
    const id = e.currentTarget.dataset.id;
    const job = this.data.jobs.find(item => item.id === id);
    
    if (job) {
      this.setData({
        currentJob: job,
        showApply: true
      });
      
      // 获取用户信息，自动填充表单
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.setData({
          'form.name': userInfo.name || '',
          'form.phone': userInfo.phone || '',
          'form.email': userInfo.email || ''
        });
      }
    }
  },
  
  /**
   * 关闭申请职位弹窗
   */
  closeApply: function() {
    this.setData({
      showApply: false
    });
  },
  
  /**
   * 选择简历文件
   */
  chooseResume: function() {
    wx.chooseMessageFile({
      count: 1,
      type: 'file',
      extension: ['pdf', 'doc', 'docx'],
      success: (res) => {
        const file = res.tempFiles[0];
        
        // 检查文件大小
        if (file.size > 10 * 1024 * 1024) {
          wx.showToast({
            title: '文件大小不能超过10MB',
            icon: 'none'
          });
          return;
        }
        
        this.setData({
          'form.resumeFile': {
            path: file.path,
            name: file.name || '简历文件.pdf'
          },
          uploadProgress: 0
        });
      }
    });
  },
  
  /**
   * 删除简历文件
   */
  deleteResume: function() {
    this.setData({
      'form.resumeFile': null
    });
  },
  
  /**
   * 提交申请
   */
  submitApplication: function() {
    // 表单验证
    let isValid = true;
    const formError = {};
    
    if (!this.data.form.name.trim()) {
      formError.name = '请输入姓名';
      isValid = false;
    }
    
    if (!this.data.form.phone.trim()) {
      formError.phone = '请输入手机号';
      isValid = false;
    } else if (!/^1\d{10}$/.test(this.data.form.phone.trim())) {
      formError.phone = '手机号格式不正确';
      isValid = false;
    }
    
    if (!this.data.form.introduction.trim()) {
      formError.introduction = '请输入个人简介';
      isValid = false;
    }
    
    if (!isValid) {
      this.setData({ formError });
      return;
    }
    
    // 显示加载提示
    wx.showLoading({
      title: '提交中...',
    });
    this.setData({ uploading: true });
    
    // 构建申请数据
    const data = {
      jobId: this.data.currentJob.id,
      name: this.data.form.name,
      phone: this.data.form.phone,
      email: this.data.form.email,
      introduction: this.data.form.introduction,
      resumeFile: this.data.form.resumeFile ? this.data.form.resumeFile.path : null
    };
    
    // 模拟提交成功
    setTimeout(() => {
      wx.hideLoading();
      this.setData({
        showApply: false,
        showSuccessModal: true,
        uploading: false
      });
      
      // 实际项目中应该使用以下代码提交到后端
      // api.employment.applyJob(data, (progress) => {
      //   this.setData({ uploadProgress: progress });
      // }).then(res => {
      //   this.setData({ uploading: false });
      //   
      //   if (res.code === 200) {
      //     wx.showToast({
      //       title: '申请成功',
      //       icon: 'success'
      //     });
      //     
      //     this.setData({
      //       showApply: false,
      //       showSuccessModal: true
      //     });
      //   } else {
      //     wx.showToast({
      //       title: res.msg || '申请失败',
      //       icon: 'none'
      //     });
      //   }
      // }).catch(err => {
      //   console.error('提交申请失败', err);
      //   this.setData({ uploading: false });
      //   
      //   wx.showToast({
      //     title: '申请失败，请检查网络',
      //     icon: 'none'
      //   });
      // });
    }, 1500);
  },
  
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 确保弹窗初始状态为关闭
    this.setData({
      showDetail: false,
      showApply: false
    });
    
    // 加载职位列表
    this.loadJobList(true);
    
    // 如果有指定的职位ID，则直接查看详情
    if (options && options.jobId) {
      this.viewJobDetail({ currentTarget: { dataset: { id: options.jobId } } });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 只有当申请弹窗显示时，才自动填充表单
    if (this.data.showApply) {
      // 获取用户信息，自动填充表单
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.setData({
          'form.name': userInfo.name || '',
          'form.phone': userInfo.phone || '',
          'form.email': userInfo.email || ''
        });
      }
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.loadJobList(true);
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    if (this.data.hasMore && !this.data.loading) {
      this.loadMore();
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '山东劳动职业技术学院招聘信息',
      path: '/pages/employment/job-info'
    };
  },

  /**
   * 加载职位列表
   * @param {Boolean} refresh 是否刷新
   */
  loadJobList: function (refresh = false) {
    if (refresh) {
      this.setData({
        pageNum: 1,
        jobList: [],
        hasMore: true
      });
    }
    
    if (!this.data.hasMore || this.data.loading) {
      return;
    }
    
    this.setData({ loading: true });
    
    // 构建查询参数
    const params = {
      pageNum: this.data.pageNum,
      pageSize: this.data.pageSize,
      keyword: this.data.keyword,
      industry: this.data.industry,
      jobType: this.data.jobType
    };
    
    // 调用API获取数据
    api.employment.getJobs(params).then(res => {
      if (res.code === 200) {
        const data = res.data;
        
        // 处理标签
        const newJobs = data.list.map(job => {
          // 如果后端已经处理了标签，则直接使用
          if (!job.tagList && job.tags) {
            job.tagList = job.tags.split(',').map(tag => tag.trim()).filter(tag => tag);
          }
          return job;
        });
        
        this.setData({
          jobList: refresh ? newJobs : this.data.jobList.concat(newJobs),
          total: data.total,
          pageNum: this.data.pageNum + 1,
          hasMore: this.data.pageNum * this.data.pageSize < data.total,
          loading: false
        });
        
        wx.stopPullDownRefresh();
      } else {
        this.setData({ loading: false });
        wx.showToast({
          title: '加载失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      this.setData({ loading: false });
      wx.showToast({
        title: '加载失败，请检查网络',
        icon: 'none'
      });
    });
  },
  
  /**
   * 加载更多
   */
  loadMore: function () {
    this.loadJobList();
  },
  
  /**
   * 筛选行业
   */
  filterByIndustry: function (e) {
    const industry = e.currentTarget.dataset.value;
    this.setData({
      industry: this.data.industry === industry ? '' : industry
    });
    this.loadJobList(true);
  },
  
  /**
   * 筛选职位类型
   */
  filterByJobType: function (e) {
    const jobType = e.currentTarget.dataset.value;
    this.setData({
      jobType: this.data.jobType === jobType ? '' : jobType
    });
    this.loadJobList(true);
  },
  
  /**
   * 打开申请弹窗
   */
  openApply: function () {
    this.setData({
      showDetail: false,
      showApply: true,
      form: {
        name: '',
        phone: '',
        email: '',
        introduction: '',
        resumeFile: ''
      },
      formError: {
        name: '',
        phone: '',
        introduction: ''
      },
      uploadProgress: 0
    });
  },
  
  /**
   * 表单输入
   */
  inputChange: function (e) {
    const { field } = e.currentTarget.dataset;
    const { value } = e.detail;
    
    this.setData({
      [`form.${field}`]: value,
      [`formError.${field}`]: ''
    });
  },
  
  /**
   * 阻止弹窗背景滚动
   */
  preventTouchMove: function() {
    return false;
  },

  /**
   * 关闭成功弹窗
   */
  closeSuccessModal: function() {
    this.setData({
      showSuccessModal: false,
      // 重置表单数据
      form: {
        name: '',
        phone: '',
        email: '',
        introduction: '',
        resumeFile: null
      }
    });
  },

  /**
   * 拨打电话
   */
  callPhone: function(e) {
    const phone = e.currentTarget.dataset.phone;
    wx.makePhoneCall({
      phoneNumber: phone
    });
  },
  
  /**
   * 复制邮箱
   */
  copyEmail: function(e) {
    const email = e.currentTarget.dataset.email;
    wx.setClipboardData({
      data: email,
      success: () => {
        wx.showToast({
          title: '邮箱已复制',
          icon: 'success'
        });
      }
    });
  },
})
